// import axios from "axios";
// // 默认参数
// const defaultConfig = {
//   timeout: 5000,
//   baseUrl: "",
// }
// // 创建一个请求实例
// const axiosInstance = axios.create(defaultConfig);
//
// // 请求拦截
// axiosInstance.interceptors.request.use(config => {
//   return config;
// }, error => {
//   return Promise.reject();
// });
//
// // 响应拦截
// axiosInstance.interceptors.response.use(config => {
//   return config;
// }, error => {
//   return Promise.reject();
// });
//
// // 封装请求
// // get
// function httpRequestGet(url, params) {
//  return axiosInstance.get(url, params).then(res => res.data).catch()
// }
// // post
// function httpRequestPost(url, params) {
//   return axiosInstance.post(url, params).then(res => res.data).catch()
// }
//
// export default {
//   httpRequestGet,
//   httpRequestPost,
// };

import axios, { AxiosRequestConfig, AxiosResponse } from "axios";

// 默认参数
const defaultConfig = {
  timeout: 5000,
  // baseURL 不是常用的驼峰式命名
  // 线上是不需要跨域处理的
  baseURL: import.meta.env.PROD ? "" : "http://localhost:5173"
};

// 对上面代码进行二次封装一下
class Http {
  // 创建一个请求实例
  private static axiosInstance = axios.create(defaultConfig);

  constructor() {
    this.httpInterceptorsRequest();
    this.httpInterceptorsResponse();
  }

  /**
   * 私有方法
   * */
  // 请求拦截
  private httpInterceptorsRequest() {
    Http.axiosInstance.interceptors.request.use((config: AxiosRequestConfig) => {
      return config;
    }, (err) => {
      return Promise.reject(err);
    });
  }

  // 响应拦截
  private httpInterceptorsResponse() {
    Http.axiosInstance.interceptors.response.use((response: AxiosResponse) => {
      return response;
    }, err => {
      return Promise.reject(err);
    });
  }

  /**
   * 共有方法
   * 封装请求
   * */
  // get
  public httpRequestGet<T>(url: string, params: AxiosRequestConfig): Promise<T> {
    return Http.axiosInstance.get(url, { params }).then(res => res.data).catch();
  }

  // post
  public httpRequestPost<T>(url: string, params: AxiosRequestConfig): Promise<T> {
    return Http.axiosInstance.post(url, params).then(res => res.data).catch();
  }
}

export const http = new Http();
